延續昨天的抽象類別及它的子類別:
abstract class Element {
def contents: Array[String]
val height = contents.length
val width = if (height == 0) 0 else contents(0).length
}
class ArrayElement(conts: Array[String]) extends Element {
val contents: Array[String] = conts
}
這時我們需要創建一個新的類別,只需要extends
ArrayElement即可:
class LineElement(s: String) extends ArrayElement(Array(s) {
override def width = s.length
override def height = 1
}
LineElement中的width和height都用了override
關鍵字,因為它覆寫了父類別的成員。
由於LineElement是extends自ArrayElement,而ArrayElement的建構式接收一個Array[String]的參數,所以LineElement要向父類別傳入一個Array[String]的參數。
要呼叫父類別的建構式,只需將要傳入的參數放在父類別名稱後的括號裡即可。
有時候父類別的某個成員不想被子類別繼承時,就在那個成員前面加上final
關鍵字。
class ArrayElement extends Element {
final override demo() = {
println("ArrayElement")
}
}
有時候想確保整個類別沒有子類別(subclass),那就在類別前加上final
關鍵字。
final class ArrayElement extends Element {
override demo() = {
println("ArrayElement")
}
}